// File: jmcomic-core/src/main/java/dev/jukomu/jmcomic/client/JmJsonResp.java
package dev.jukomu.jmcomic.client;

import dev.jukomu.common.util.json.AdvancedMap;
import dev.jukomu.common.util.json.JsonUtils;
import dev.jukomu.jmcomic.exception.ExceptionUtils;
import dev.jukomu.jmcomic.exception.JsonResolveFailException;
import okhttp3.Response;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;

/**
 * 对应Python的JmJsonResp，用于处理JSON响应。
 */
public class JmJsonResp extends JmResp {

    // 缓存解析后的JSON Map，避免重复解析
    private final AtomicReference<Map<String, Object>> jsonCache = new AtomicReference<>(null);

    /**
     * 构造函数。
     *
     * @param rawResponse 原始OkHttp响应对象。
     */
    public JmJsonResp(Response rawResponse) {
        super(rawResponse);
    }

    @Override
    public Map<String, Object> getJson() {
        if (jsonCache.get() == null) {
            synchronized (jsonCache) {
                if (jsonCache.get() == null) {
                    try {
                        jsonCache.set(JsonUtils.parseStringAsMap(getText()));
                    } catch (IOException e) {
                        ExceptionUtils.raisesResp("json解析失败: " + e.getMessage(), this, JsonResolveFailException.class);
                    }
                }
            }
        }
        return jsonCache.get();
    }

    @Override
    public AdvancedMap getModel() {
        return new AdvancedMap(getJson());
    }
}